package com.lzyjkz.quick_components.configuration;

import com.lzyjkz.quick_components.Interceptor.ExecutedTimeInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.lang.NonNullApi;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@RequiredArgsConstructor
@Configuration
@Profile("dev")
public class CorsConfig implements WebMvcConfigurer {

    @Value("${spring.profiles.active}")
    String profile;

    private final ExecutedTimeInterceptor executedTimeInterceptor;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        if ("dev".equals(profile)) {
            registry.addMapping("/*") // 允许所有路径的跨域请求
                    .allowedOrigins("*") // 允许来自 http://example.com 的跨域请求
                    .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法
                    .allowedHeaders("*") // 允许的头部信息
//                    .allowCredentials(true) // 是否允许携带认证信息（如 cookies）
                    .maxAge(3600); // 预检请求的缓存时间（秒）
            return ;
        }

        if ("prod".equals(profile)) {
            registry.addMapping("/*") // 允许所有路径的跨域请求
                    .allowedOrigins("http://example.com") // 允许来自 http://example.com 的跨域请求
                    .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法
                    .allowedHeaders("*") // 允许的头部信息
                    .allowCredentials(true) // 是否允许携带认证信息（如 cookies）
                    .maxAge(3600); // 预检请求的缓存时间（秒）
            return ;
        }
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(executedTimeInterceptor);
    }
}
